home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-07-13 | 10.7 KB | 386 lines | [TEXT/ds30] |
- /*
- execute file "BackupHelp";
-
- SIMPLE SERVER MANAGEMENT MODEL
- ==============================
-
- */
-
- /* ******************************************************************************************** */
- /* DEVICES */
- /* ******************************************************************************************** */
-
- execute file "DeviceHelp";
-
- /* ******************************************************************************************** */
- /* BACKUP/RESTORE */
- /* ******************************************************************************************** */
-
- PROCEDURE backup_server()
- {
- describe databases into db;
- for each db {
- if ((varchar db->name != "Model")
- and (varchar db->name != "Master")) {
- print "Backing Up Database", db->name;
- backup database varchar db->name replace previous;
- }
- }
-
- open_master();
- set variable Offlinefunction = "Archive";
- close_master();
- print "Backing Up Database Master";
- backup database Master replace previous;
- } END PROCEDURE backup_server;
-
- PROCEDURE restore_server(mode)
- ARGUMENT integer mode = 0;
- {
- switch (mode) {
- case 1:
- print "Restoring The Master Database";
- trans shutdown;
- server restore;
- server restart;
-
- case 2:
- describe databases into db;
- for each db {
- if ((varchar db->name != "Model")
- and (varchar db->name != "Master")) {
- print "Restoring The Database: ", db->name;
- restore database varchar db->name;
- }
- }
- break;
-
- default:
- print "restore_server (mode)";
- print "mode = 1: restore master database along with the user databases";
- print "mode = 2: restore only the user databases, not the master database";
- }
- } END PROCEDURE restore_server;
-
- PROCEDURE sync_backups()
- {
- print "Syncronizing database backup counts";
- open_master();
- select max(BackupCount) +1 as cnt from sysdatabases into bc;
- fetch of bc;
- update sysdatabases set BackupCount = bc->cnt;
- close_master();
- } END PROCEDURE sync_backups;
-
- PROCEDURE help_backup()
- {
- print "";
- print "BACKUP & RESTORE:";
- print "------------------";
- print "The following functions are provided to perform high level server";
- print "backups.";
- print "";
- print "PROCEDURE backup_server()";
- print "Backup all databases on the server except the model database.";
- print "";
- print "PROCEDURE restore_server(mode)";
- print "Restore all databases on the server from the last backup.";
- print "This function will optionaly restore the master database:";
- print "mode = 1: restore ALL database (Master database first).";
- print "mode = 2: restore only the user databases.";
- print "";
- print "PROCEDURE sync_backups()";
- print "Syncronize the backup count of all databases.";
- print "Each database contains an entry in the master database saying how";
- print "many times it has been backed up. This number is used to determine";
- print "the next backup group. All subsequent executions of 'backup_server()'";
- print "will place all database backups in the same group.";
- print "";
- } END PROCEDURE help_backup;
-
- /* ******************************************************************************************** */
- /* BACKUP GROUPS */
- /* ******************************************************************************************** */
-
- PROCEDURE help_groups()
- {
- print "";
- print "BACKUP GROUPS:";
- print "--------------";
- print "Several backup devices can be selected for placing backups as they";
- print "are created. A collection of devices for a backup are called a group";
- print "Backup groups are automatically numbered 1, 2, 3, ... n.";
- print "Backups are done to each group in turn. For example, if the last";
- print "backup of database 'x' was in group 2, then the next will be in 3.";
- print "And if the last backup was in group 'n', then the next will be in";
- print "group 1. Note that removing a backup group will causes all backup";
- print "groups after that to be renumbered.";
- print "";
- print "PROCEDURE list_backup_groups()";
- print "List all backup groups.";
- print "";
- print "PROCEDURE add_backup_group(group)";
- print "Add an 'empty' backup group.";
- print "";
- print "PROCEDURE new_backup_group(group, device)";
- print "Add a new backup group and place index and data on the given device.";
- print "";
- print "PROCEDURE alter_backup_group(group, device, data, index)";
- print "Alter a given database group. Specify a device name and whether";
- print "data or index files should be placed on the device ($true) or";
- print "not ($false). If the status of data or index on the device";
- print "should remain unaltered, specify $null.";
- print "";
- print "PROCEDURE remove_backup_group(group)";
- print "Remove a particular backup group.";
- print "";
- } END PROCEDURE help_groups;
-
- PROCEDURE find_backup_location(group, device, type, print_error)
- RETURNS integer;
- ARGUMENT integer group;
- ARGUMENT varchar device, type;
- ARGUMENT boolean print_error = $TRUE;
- {
- integer dev_id;
-
- dev_id = find_device(device);
- if (dev_id == 0)
- return(0);
-
- open_master;
- select id
- from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- and .GroupNumber = :group
- and .DeviceID = :dev_id
- and .FileType = :type
- order by id
- into $cur for extract;
- if ($rows($cur) == 0) {
- if (print_error)
- print $format("ERROR: Backup group '%d' does not locate %s files on device '%s'.",
- group, $tolower(type), device);
- return(0);
- }
- fetch first of $cur;
- return($cur->id);
- } END PROCEDURE find_backup_location;
-
- PROCEDURE remove_backup_location(group, device, type)
- RETURNS integer;
- ARGUMENT integer group;
- ARGUMENT varchar filetype;
- {
- integer loc_id;
-
- loc_id = find_backup_location(group, device, type);
- if (loc_id != 0)
- REMOVE LOCATION (loc_id);
- return(loc_id);
- } END PROCEDURE remove_backup_location;
-
- PROCEDURE add_backup_location(group, device, type)
- RETURNS integer;
- ARGUMENT integer group;
- ARGUMENT varchar device;
- ARGUMENT varchar type;
- {
- integer dev_id;
- integer loc_id;
-
- dev_id = find_device(device);
- if (dev_id == 0)
- return(0);
-
- loc_id = find_backup_location(group, device, type, $FALSE);
- if (loc_id == 0) {
- ADD LOCATION (NAME = "Backup" + type + "Files" + varchar group,
- FILETYPE = type,
- FILEPURPOSE = "FutureBackup",
- DEVICEID = dev_id,
- GROUPNUMBER = group);
- loc_id = find_backup_location(group, device, type, $FALSE);
- }
- return(loc_id);
- } END PROCEDURE add_backup_location;
-
- PROCEDURE backup_group_count()
- RETURNS integer;
- {
- open_master;
- select max(groupnumber) as maxx
- from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- into $cur for extract;
- if ($rows($cur) == 0)
- return 0;
- fetch first of $cur;
- return($cur->maxx);
- } END PROCEDURE backup_group_count;
-
- PROCEDURE find_backup_group(group, print_error)
- RETURNS boolean;
- ARGUMENT boolean print_error = $TRUE;
- {
- open_master;
- select id from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- and .GroupNumber = :group
- order by id
- into $cur for extract;
- if ($rows($cur) == 0) {
- if (print_error)
- print $format("ERROR: Backup group '%d' does not exist.", group);
- return($FALSE);
- }
- return ($TRUE);
- } END PROCEDURE find_backup_group;
-
- PROCEDURE add_backup_group(group)
- ARGUMENT integer group;
- {
- select id, filetype, groupnumber from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- and .GroupNumber is not null
- and GroupNumber >= :group
- order by id
- into $cur for extract;
- for each $cur {
- ALTER LOCATION ($cur->id,
- NAME = "Backup" + $cur->filetype + "Files" + varchar ($cur->groupnumber + 1),
- GROUPNUMBER = ($cur->groupnumber + 1));
- }
- } END PROCEDURE add_backup_group;
-
- PROCEDURE remove_backup_group(group)
- ARGUMENT integer group;
- {
- select id from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- and .GroupNumber is not null
- and GroupNumber == :group
- order by id
- into $cur for extract;
- for each $cur
- REMOVE LOCATION ($cur->id);
-
- select id, filetype, groupnumber from $sm_master!syslocations
- where .FilePurpose = "FutureBackup"
- and .GroupNumber is not null
- and GroupNumber > :group
- order by id
- into $cur for extract;
- for each $cur {
- ALTER LOCATION ($cur->id,
- NAME = "Backup" + $cur->filetype + "Files" + varchar ($cur->groupnumber - 1),
- GROUPNUMBER = ($cur->groupnumber - 1));
- }
- } END PROCEDURE remove_backup_group;
-
- PROCEDURE alter_backup_group(group, device, data, index)
- ARGUMENT integer group;
- ARGUMENT generic device;
- ARGUMENT boolean data, index;
- {
- if (data is not null) {
- if (data)
- add_backup_location(group, device, "Data");
- else
- remove_backup_location(group, device, "Data");
- }
- if (index is not null) {
- if (index)
- add_backup_location(group, device, "Index");
- else
- remove_backup_location(group, device, "Index");
- }
-
- if (not find_backup_group(group, $FALSE))
- remove_backup_group(group);
- } END PROCEDURE alter_backup_group;
-
- PROCEDURE new_backup_group(group, device)
- ARGUMENT integer group;
- ARGUMENT generic device;
- {
- add_backup_group(group);
- alter_backup_group(group, device, $TRUE, $TRUE);
- } END PROCEDURE new_backup_group;
-
- PROCEDURE list_backup_groups()
- {
- integer group, dev_id;
- boolean data, index;
-
- open_master;
- select loc.groupnumber, loc.filetype, dev.id as dev_id, dev.name as devname, dev.path
- from $sm_master!syslocations as loc,
- $sm_master!sysdevices as dev
- where loc.FilePurpose = "FutureBackup"
- and loc.deviceid = dev.id
- and loc.groupnumber is not null
- order by GroupNumber, dev.id, loc.filetype
- into $cur for extract;
-
- print 'Group: Device: Data: Index:';
- print '--------------- ----------------------- ------------ -----------';
- fetch first of $cur;
- while ($sqlcode != $sqlnotfound) {
- group = $cur->groupnumber;
- dev_id = $cur->dev_id;
- data = $FALSE;
- index = $FALSE;
-
- printf("%-16d%-24s", group, $cur->devname);
-
- while ($sqlcode != $sqlnotfound) {
- if (group = $cur->groupnumber and
- dev_id = $cur->dev_id) {
- if ($cur->filetype == "Data")
- data = $TRUE;
- if ($cur->filetype == "Index")
- index = $TRUE;
- }
- else
- break;
- fetch next of $cur;
- }
-
- if (data)
- printf("YES ");
- else
- printf(" - ");
- if (index)
- print "YES ";
- else
- print " - ";
- }
- } END PROCEDURE list_backup_groups;
-
- /* ******************************************************************************************** */
- /* HELP */
- /* ******************************************************************************************** */
-
- PROCEDURE help_all()
- {
- help_backup;
- help_groups;
- } END PROCEDURE help_all;
-
- PROCEDURE help()
- {
- print "";
- print "BACKUP ADMINSTRATION:";
- print "---------------------";
- print "The folowing help functions are available:";
- print "help_backup;";
- print "help_groups;";
- print "help_all;";
- print "";
- } END PROCEDURE help;
-
- print "Backup adminstration help functions defined.";
- print "Enter: 'help;' for help.";
-
-